#ifndef TDA_LISTA
#define TDA_LISTA

#include "TP.h"
#include "Dato.h"

// =============================================================================

typedef struct Lista* tLista;

void listaCrear (tLista* pLista, tFcnDestructorDato pFcnDestructorDato);

void listaDestruir (tLista pLista);

int listaVacia (tLista pLista);

int listaLongitud(tLista pLista);

int listaAgregarFinal (tLista pLista, tDato pDato);

tDato listaRemover (tLista pLista, tDato pDato);

tDato listaObtenerPrimero(tLista pLista);

tDato listaObtenerSiguiente(tLista pLista, tDato pDato);

//==============================================================================

typedef struct IteradorLista* tIteradorLista;

tIteradorLista listaObtenerIterador (tLista pLista);

void listaLiberarIterador (tIteradorLista pIterador);

tBool listaIteradorMoverPrimero (tIteradorLista pIterador);

tBool listaIteradorMoverSiguiente (tIteradorLista pIterador);

tDato listaIteradorActual(tIteradorLista pIterador);

#endif /*TDA_LISTA*/
